package com.shihb.chapter02function

/**
 * Description:闭包的演示
 *
 * @author shihb
 * @date 2020/10/2 11:35
 */

object Demo08Closure {
  //需求 用闭包的思想，写一个函数指定后缀,如果文件名不含指定后缀就加上
  // dog.big dog.big
  // cat     cat.big
  // 传统的实现
  def tradition(suffix:String,filename:String) ={
    if (filename.endsWith(suffix)) filename else filename+suffix
  }
  // 函数柯里化的写法
  def curry(suffix:String)(filename:String) ={
    if (filename.endsWith(suffix)) filename else filename+suffix

  }
  // 闭包的实现
  def makeSuffix(suffix:String)={
    y:String=>if (y.endsWith(suffix)) y else y+suffix
  }
  def main(args: Array[String]): Unit = {
    val f1=makeSuffix(".big")
    for(i <- 1 to 5){
      //传统的方法每次都要传入后缀名
      tradition(".jpg",i.toString)
      //闭包只要传一次就可以多次调用
      makeSuffix(i.toString)
    }

    println(curry(".jpg")( "dog.jpg"))
    println(curry(".jpg")("cat"))
    println(f1("dog.big"))
    println(f1("cat"))

  }


}
